import 'package:flutter/material.dart';

class Product {

  const Product({this.name});

  final String name;

}

typedef void CartChangedCallBack(Product product, bool inCart);

class ShoppingListItem extends StatelessWidget {

  ShoppingListItem({Product product, this.inCart, this.onCartChanged})
      :product=product,
        super(key: new ObjectKey(product));

  final Product product;

  final bool inCart;

  final CartChangedCallBack onCartChanged;

  Color _getColor(BuildContext context) {
    return inCart ? Colors.black54 : Theme
        .of(context)
        .primaryColor;
  }

  TextStyle _getTextStyle(BuildContext context) {
    if (!inCart) return null;
    return new TextStyle(
      color: Colors.black54,
      decoration: TextDecoration.lineThrough,
    );
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new ListTile(
      onTap: () {
        onCartChanged(product, !inCart);
      },
      leading: new CircleAvatar(
        backgroundColor: _getColor(context),
        child: new Text(product.name),
      ),
      title: new Text(product.name, style: _getTextStyle(context),),
    );
  }

}
/**
 * 响应widget生命周期事件
 * createState： ，框架将新的状态对象插入树中，然后调用状态对象的 initState。
 * initState:  子类化State可以重写initState，以完成仅需要执行一次的工作
 *            ，您可以重写initState以配置动画或订阅platform services。initState的实现中需要调用super.initState。
 *
 * disponse: 当一个状态对象不再需要时，框架调用状态对象的dispose.您可以覆盖该dispose方法来执行清理工作
 *          您可以覆盖dispose取消定时器或取消订阅platform services。 dispose典型的实现是直接调用super.dispose。
 */
class ShoppingList extends StatefulWidget {

  ShoppingList({Key key, this.products}) : super(key: key);

  final List<Product> products;

  @override
  State<StatefulWidget> createState() {
    return new _ShoppingListState();
  }



}

class _ShoppingListState extends State<ShoppingList> {

  Set<Product> _shoppingCart = new Set<Product>();

  void _handleCartChange(Product product, bool inCart) {
    setState(() {
      if (inCart) {
        _shoppingCart.add(product);
      } else {
        _shoppingCart.remove(product);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('购物车',
          textAlign: TextAlign.center,
          style: new TextStyle(
            fontStyle: FontStyle.italic,
          ),),
      ),
      body: new ListView(
        padding: new EdgeInsets.symmetric(vertical: 8.0),
        children: widget.products.map((Product product) {
          return new ShoppingListItem(
            product: product,
            inCart: _shoppingCart.contains(product),
            onCartChanged: _handleCartChange,
          );
        }).toList(),
      ),
    );
  }

  // 组件初始化时调用
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  //组件销毁时调用
  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
  }

}


